package com.lagou.task01;

import java.io.*;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;

/**
 *
 * 基于学生信息管理系统增加以下两个功能
 * a.自定义学号异常类和年龄异常类，并在该成员变量不合理时产生异常对象并抛出
 * b.当系统退出时，将 List 集合中所有学生信息写入到文件，当系统启动时读取文件中所有学生信息到 List 集合中。
 *
 * */
public class StudentManagerTest {

    // 文件路径
    private static final String fileUrl = "/Users/pengxixi/JavaSource/lagou/lagou-home-work/code/Stage1_Mould4/src/com/lagou/task01/StudentsList.txt";

    public static void main(String[] args) {

        System.out.println("--------------------------------");
        System.out.println("----------学生管理系统------------");
        System.out.println("--------------------------------");

        StudentEditor editor = new StudentEditor();

        // 从本地文件中读取已存的信息
        unArchiving(editor);

        Scanner sc = new Scanner(System.in);

        while (true){
            //显示功能列表，并提示用户输入
            editor.showMenu();
            //用户输入
            int funcCode = sc.nextInt();

            System.out.println("用户选择了功能" + funcCode);

            switch (funcCode){
                case 0:
                    // 缓存文件到本地
                    archiving(editor.getStudentList());
                    System.out.println("程序已退出");
                    return;
                case 1:
                    editor.add();
                    break;
                case 2:
                    editor.delete();
                    break;
                case 3:
                    editor.edit();
                    break;
                case 4:
                    editor.traverse();
                    break;
                default:
                    System.out.println("暂未开放的功能");
                    break;
            }

            System.out.println("--------------------------------");
        }
    }


    // 解档 从本地文件读取数据
    public static void unArchiving(StudentEditor editor){
        //类输入流
        ObjectInputStream ois = null;
        try {
            // 创建 ObjectInputStream 关联文件
            ois = new ObjectInputStream(new FileInputStream(fileUrl));
            // 读取并强转成 List
            LinkedList<Student> cacheStudentList = (LinkedList<Student>)ois.readObject();
            editor.setStudentList(cacheStudentList);
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        } finally {
            if (null != ois) {
                try {
                    ois.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    // 归档 储存数据到本地
    public static void archiving(List<Student> studentList){
        //类输出流
        ObjectOutputStream oos = null;
        try {
            // 创建 ObjectOutputStream 关联文件
            oos = new ObjectOutputStream(new FileOutputStream(fileUrl));
            // 保存 List 类
            oos.writeObject(studentList);
            System.out.println("保存成功");
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("保存失败");
        } finally {
            if (null != oos) {
                try {
                    oos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

}
